package practice;

/**
 * 进⾏普通⽂件的复制
 */

import java.io.*;
import java.util.Scanner;

/**
 * 1.请用户输入一个他想要复制的源文件
 * 2.校验一下用户输入的源文件是否存在且是一个文件
 * 3.请用户输入一下他想要复制到哪个路径下面
 * 4.校验一下目标路径，（1.校验一下目标路径文件是否与源文件一致，一致的话直接提示返回
 *                   2.校验一下目标路径的父目录是否已经存在，不存在直接提示返回
 *                   3.如果父目录已经存在的话，看一下是否已经存在了，如果是目录则返回
 *                     是文件则询问是否覆盖，如果覆盖执行覆盖操作
 */
public class DEMO_05 {
    public static void main(String[] args) throws IOException {
        Scanner scanner=new Scanner(System.in);
        System.out.println("请输入你想要复制的源文件");
        String resourcePath=scanner.nextLine();
        File resourceFile=new File(resourcePath);
        if(!resourceFile.exists()){
            System.out.println("源文件不存在");
            return;
        }
        if (resourceFile.isDirectory()){
            System.out.println("此路径是一个目录");
            return;
        }
        System.out.println("请输入你想要将文件复制到哪里去");
        String tailPath=scanner.nextLine();
        File tailFile=new File(tailPath);
        copy(resourceFile,tailFile);
    }

    private static void copy(File resourceFile, File tailFile) throws IOException {
        if(resourceFile.getCanonicalFile().equals(tailFile.getCanonicalFile())){
            System.out.println("目标路径与源文件一致直接返回");
            return;
        }
        if(!tailFile.getParentFile().exists()||tailFile.getParentFile().isFile()){
            System.out.println("父目录不存在或其父目录是一个文件");
            return;
        }
        Scanner scanner=new Scanner(System.in);
        if (tailFile.exists()){
            if(tailFile.isDirectory()){
                System.out.println("目标路径下存在同名目录，直接返回");
                return;
            }else{
                System.out.println("目标路径下存在同名文件，是否选择覆盖 Y：yes N：no");
                String choice=scanner.nextLine();
                if(choice.toLowerCase().equals("n")){
                    System.out.println("终止复制");
                    return;
                }
            }
        }
        try(InputStream inputStream=new FileInputStream(resourceFile);
            OutputStream outputStream=new FileOutputStream(tailFile)){
            byte[] bytes=new byte[1024];
            while (true){
                int len = inputStream.read(bytes);
                if(len==-1) break;
                outputStream.write(bytes,0,len);
            }
            outputStream.flush();
            System.out.println("复制成功");
        }
    }
}
